package com.hunttown.mes.impl;

import com.hunttown.common.domain.Page;
import com.hunttown.common.domain.Query;
import com.hunttown.mes.common.utils.StringUtils;
import com.hunttown.mes.rpc.api.TransportTaskRpcService;
import com.hunttown.mes.rpc.domain.TransportTaskDTO;
import com.hunttown.mes.rpc.domain.query.TransportTaskDTOQuery;
import com.hunttown.mes.service.TransportTaskService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

import static com.hunttown.mes.convert.TransportTaskConverts.convert;

/**
 * created by wangjunfu on 2020-05-20 17:34:35
 */
@Service
public class TransportTaskRpcServiceImpl implements TransportTaskRpcService {

    private final Logger logger = LoggerFactory.getLogger(TransportTaskRpcServiceImpl.class);

    private final TransportTaskService transportTaskService;

    @Autowired
    public TransportTaskRpcServiceImpl(TransportTaskService transportTaskService) {
        this.transportTaskService = transportTaskService;
    }

    @Override
    public TransportTaskDTO insert(TransportTaskDTO transportTaskDTO) {
        try {
            return convert(transportTaskService.insert(convert(transportTaskDTO)));
        } catch (Exception e) {
            logger.error("TransportTask create failed.", e);
            throw new RuntimeException("TransportTask create failed, Please order your code.", e);
        }
    }

    @Override
    public Boolean updateInfoById(TransportTaskDTO transportTaskDTO) {
        try {
            return transportTaskService.updateInfoById(convert(transportTaskDTO));
        } catch (Exception e) {
            logger.error("TransportTask update by id failed.", e);
            throw new RuntimeException("TransportTask update by id failed, Please order your code.", e);
        }
    }

    @Override
    public Boolean updateInfoByQuery(TransportTaskDTOQuery transportTaskDTOQuery) {
        try {
            Query query = Query.page(1, 5);

            if (transportTaskDTOQuery.getW_id() != null && transportTaskDTOQuery.getW_id() > 0) {
                query.put("w_id", transportTaskDTOQuery.getW_id());
            }

            if (transportTaskDTOQuery.getIds() != null && !transportTaskDTOQuery.getIds().equals("")) {
                query.put("ids", transportTaskDTOQuery.getIds());
            }

            if (transportTaskDTOQuery.getStopFlag() != null) {
                query.put("stopFlag", transportTaskDTOQuery.getStopFlag());
            }

            if (transportTaskDTOQuery.getDeleteFlag() != null) {
                query.put("deleteFlag", transportTaskDTOQuery.getDeleteFlag());
            }

            return transportTaskService.updateInfoByQuery(query);
        } catch (Exception e) {
            logger.error("TransportTask update by query failed.", e);
            throw new RuntimeException("TransportTask update by query failed, Please order your code.", e);
        }
    }

    @Override
    public TransportTaskDTO selectById(Integer id) {
        try {
            return convert(transportTaskService.selectById(id));
        } catch (Exception e) {
            logger.error("TransportTask select by id failed.", e);
            throw new RuntimeException("TransportTask select by id failed, Please order your code.", e);
        }
    }

    @Override
    public TransportTaskDTO selectObjByQuery(TransportTaskDTOQuery transportTaskDTOQuery) {
        try {
            Query query = Query.page(1, 5);

            return convert(transportTaskService.selectObjByQuery(query));
        } catch (Exception e) {
            logger.error("TransportTask select obj by query failed.", e);
            throw new RuntimeException("TransportTask select obj by query failed, Please order your code.", e);
        }
    }

    @Override
    public Page<TransportTaskDTO> getListForPage(TransportTaskDTOQuery transportTaskDTOQuery) {
        Query query = Query.page(transportTaskDTOQuery.getPn(), transportTaskDTOQuery.getPageSize());

        if (transportTaskDTOQuery.getId() != null && transportTaskDTOQuery.getId() > 0) {
            query.put("id", transportTaskDTOQuery.getId());
        }

        if (transportTaskDTOQuery.getIds() != null && !transportTaskDTOQuery.getIds().equals("")) {
            query.put("ids", transportTaskDTOQuery.getIds());
        }

        if (transportTaskDTOQuery.getTaskType() != null) {
            query.put("taskType", transportTaskDTOQuery.getTaskType());
        }

        if (transportTaskDTOQuery.getNotTasktype() != null) {
            query.put("notTasktype", transportTaskDTOQuery.getNotTasktype());
        }

        if (transportTaskDTOQuery.getMainExecutor() != null && transportTaskDTOQuery.getMainExecutor() > 0) {
            query.put("mainExecutor", transportTaskDTOQuery.getMainExecutor());
        }

        if (StringUtils.isNotBlank(transportTaskDTOQuery.getCooperatorName())) {
            query.put("cooperatorName", transportTaskDTOQuery.getCooperatorName());
        }

        if (transportTaskDTOQuery.getUserId() != null) {
            query.put("userId", transportTaskDTOQuery.getUserId());
        }

        if (transportTaskDTOQuery.getStatus() != null) {
            query.put("status", transportTaskDTOQuery.getStatus());
        }

        if (transportTaskDTOQuery.getStatusIds() != null && !transportTaskDTOQuery.getStatusIds().equals("")) {
            query.put("statusIds", transportTaskDTOQuery.getStatusIds());
        }

        if (StringUtils.isNotBlank(transportTaskDTOQuery.getLikeName())) {
            query.put("likeName", transportTaskDTOQuery.getLikeName());
        }

        if (StringUtils.isNotBlank(transportTaskDTOQuery.getShowDate())) {
            query.put("showDate", transportTaskDTOQuery.getShowDate());
        }

        if (StringUtils.isNotBlank(transportTaskDTOQuery.getStartDate())) {
            query.put("startDate", transportTaskDTOQuery.getStartDate());
        }

        if (StringUtils.isNotBlank(transportTaskDTOQuery.getEndDate())) {
            query.put("endDate", transportTaskDTOQuery.getEndDate());
        }

        if (StringUtils.isNotBlank(transportTaskDTOQuery.getOrderBy())) {
            query.put("orderBy", transportTaskDTOQuery.getOrderBy());
        }

        if (transportTaskDTOQuery.getStopFlag() != null) {
            query.put("stopFlag", transportTaskDTOQuery.getStopFlag());
        }

        if (transportTaskDTOQuery.getDeleteFlag() != null) {
            query.put("deleteFlag", transportTaskDTOQuery.getDeleteFlag());
        }

        List<TransportTaskDTO> list = convert(transportTaskService.selectByQuery(query));
        Page<TransportTaskDTO> page = Page.from(transportTaskDTOQuery.getPn(), transportTaskDTOQuery.getPageSize(), list);
        page.setTotalItems(transportTaskService.countByQuery(query));

        return page;
    }

    @Override
    public Page<TransportTaskDTO> getMytaskListForPage(TransportTaskDTOQuery transportTaskDTOQuery) {
        Query query = Query.page(transportTaskDTOQuery.getPn(), transportTaskDTOQuery.getPageSize());

        if (transportTaskDTOQuery.getId() != null && transportTaskDTOQuery.getId() > 0) {
            query.put("id", transportTaskDTOQuery.getId());
        }

        if (transportTaskDTOQuery.getIds() != null && !transportTaskDTOQuery.getIds().equals("")) {
            query.put("ids", transportTaskDTOQuery.getIds());
        }

        if (transportTaskDTOQuery.getTaskType() != null) {
            query.put("taskType", transportTaskDTOQuery.getTaskType());
        }

        if (transportTaskDTOQuery.getNotTasktype() != null) {
            query.put("notTasktype", transportTaskDTOQuery.getNotTasktype());
        }

        if (transportTaskDTOQuery.getMainExecutor() != null && transportTaskDTOQuery.getMainExecutor() > 0) {
            query.put("mainExecutor", transportTaskDTOQuery.getMainExecutor());
        }

        if (StringUtils.isNotBlank(transportTaskDTOQuery.getCooperatorName())) {
            query.put("cooperatorName", transportTaskDTOQuery.getCooperatorName());
        }

        if (transportTaskDTOQuery.getUserId() != null) {
            query.put("userId", transportTaskDTOQuery.getUserId());
        }

        if (transportTaskDTOQuery.getNoComplete() != null) {
            query.put("noComplete", transportTaskDTOQuery.getNoComplete());
        }

        if (transportTaskDTOQuery.getStatus() != null) {
            query.put("status", transportTaskDTOQuery.getStatus());
        }

        if (transportTaskDTOQuery.getStatusIds() != null && !transportTaskDTOQuery.getStatusIds().equals("")) {
            query.put("statusIds", transportTaskDTOQuery.getStatusIds());
        }

        if (StringUtils.isNotBlank(transportTaskDTOQuery.getLikeName())) {
            query.put("likeName", transportTaskDTOQuery.getLikeName());
        }

        if (StringUtils.isNotBlank(transportTaskDTOQuery.getShowDate())) {
            query.put("showDate", transportTaskDTOQuery.getShowDate());
        }

        if (StringUtils.isNotBlank(transportTaskDTOQuery.getStartDate())) {
            query.put("startDate", transportTaskDTOQuery.getStartDate());
        }

        if (StringUtils.isNotBlank(transportTaskDTOQuery.getEndDate())) {
            query.put("endDate", transportTaskDTOQuery.getEndDate());
        }

        if (StringUtils.isNotBlank(transportTaskDTOQuery.getOrderBy())) {
            query.put("orderBy", transportTaskDTOQuery.getOrderBy());
        }

        if (transportTaskDTOQuery.getStopFlag() != null) {
            query.put("stopFlag", transportTaskDTOQuery.getStopFlag());
        }

        if (transportTaskDTOQuery.getDeleteFlag() != null) {
            query.put("deleteFlag", transportTaskDTOQuery.getDeleteFlag());
        }

        if (transportTaskDTOQuery.getPlayerType() != null) {
            query.put("playerType", transportTaskDTOQuery.getPlayerType());
        }

        if (transportTaskDTOQuery.getExecutor() != null) {
            query.put("executor", transportTaskDTOQuery.getExecutor());
        }

        if (transportTaskDTOQuery.getbStopFlag() != null) {
            query.put("bStopFlag", transportTaskDTOQuery.getbStopFlag());
        }

        if (transportTaskDTOQuery.getbDeleteFlag() != null) {
            query.put("bDeleteFlag", transportTaskDTOQuery.getbDeleteFlag());
        }

        List<TransportTaskDTO> list = convert(transportTaskService.selectMytaskByQuery(query));
        Page<TransportTaskDTO> page = Page.from(transportTaskDTOQuery.getPn(), transportTaskDTOQuery.getPageSize(), list);
        page.setTotalItems(transportTaskService.countMytaskByQuery(query));

        return page;
    }

    @Override
    public Boolean deleteById(Integer id) {
        try {
            return transportTaskService.deleteById(id);
        } catch (Exception e) {
            logger.error("TransportTask delete failed.", e);
            throw new RuntimeException("TransportTask delete failed, Please order your code.", e);
        }
    }
}